package com.linsir.lin.service;

import com.linsir.core.BaseResponse;
import com.linsir.lin.dto.AccountDTO;
import com.linsir.lin.dto.GridDTO;
import com.linsir.lin.pojo.Account;
import com.linsir.lin.pojo.Permission;
import com.linsir.lin.pojo.Role;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;


public interface AccountService {

    /**
     * 增加账号
     * @param account
     * @return
     */
    BaseResponse<Boolean> addOrUpdate(Account account) throws ParseException;

    /**
     * 列表
     * @param page
     * @param limit
     * @param searchParams
     * @return
     */
    GridDTO<AccountDTO> grid(String page,
                             String limit,
                             String searchParams) throws IOException, InvocationTargetException, IllegalAccessException;


    /**
     * 根据账号找到角色列表
     * @param account
     * @return
     */
    List<Role>  rolesByAccount(Account account);


    /**
     * 根据账号，获取角色名称列表
     * @param account
     * @return
     */
    Set<String> roleStrs(Account account);


    /**
     * 角色变成，角色字符串
     * @return
     */
    String rolestoRoleStr(List<Role> roleList);

    /**
     * 账号转化DTO
     * @return
     */
    AccountDTO toDto(Account account) throws InvocationTargetException, IllegalAccessException;

    /**
     * 账号转化DTOList
     */

    List<AccountDTO> toDtoList(List<Account> accounts) throws InvocationTargetException, IllegalAccessException;

    /**
     * 根据账号找到所有的权限
     * @param account
     * @return
     */
    List<Permission>  getPerminssionByAccount(Account account);

    Set<String> perminssionStrs(List<Permission> permissionList);

    /**
     * 通过id 获取账号
     * @param id
     * @return
     */
    Account getById( Integer id);


    /**
     * 根据账号ID获取
     * @param id
     * @return
     */
    AccountDTO getDTObyId(Integer id) throws InvocationTargetException, IllegalAccessException;

    /**
     * 通过用户名找用户
     * @param userName
     * @return
     */
    Account getByUserName(String userName);


    /**
     * 批量删除账号
     * @param ids
     * @return
     */
    BaseResponse<Boolean> batchDel(String ids);

    /**
     * 根据账号添加角色
     * @param map
     * @param accountId
     * @return
     */
    BaseResponse<Boolean> addRoles(Map<String, Object> map,Integer accountId);
}
